#include <iostream>

class Widget
{
public:
    int other;
    // 1. 目标构造函数：真正干事
    Widget(const char *name, double price, int qty)
        : name_(name), price_(price), qty_(qty)
    {
        std::cout << "主构造 " << name_ << '\n';
    }

    // 2. 委托构造函数：把部分参数写死，交给主构造
    Widget(const char *name) : Widget(name, 0.0, 1)
    {
        std::cout << "委托构造完成\n";
    }

    // 3. 再重载一个默认构造，也委托
    Widget() : Widget("anonymous")
    {
        std::cout << "默认构造完成\n";
    }
    // 委托构造函数的初始化列表里只能出现对被委托构造函数的调用，不能再初始化任何数据成员
    // Widget(int other) : Widget("anonymous"), other{other}
    // {
    // }

private:
    std::string name_;
    double price_;
    int qty_;
};

int main()
{
    Widget w1;                  // 默认 → 单参 → 三参
    Widget w2("apple", 3.5, 5); // 直接三参
    return 0;
}